home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 031-040 / amok35 / spellchecker / weitere_informationen < prev    next >
Text File  |  1993-11-04  |  7KB  |  142 lines

  1. Weitere Informationen zum SpellChecker
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3. (Bevor Sie diesen Text Lesen, sollten Sie den Text "Vorüberlegungen"
  4. gelesen haben)
  5.  
  6. Die folgenden Bemerkungen sind für die Benutzung des SpellCheckers
  7. nicht notwendig. Es soll hier nur die Funktionsweise grob skizziert
  8. werden um anderen Programmierern eine Erweiterung oder Verbesserung
  9. des Programmes zu ermöglichen. Insbesondere denke ich dabei daran, daß
  10. vielleicht mal jemand einen Editor oder eine Textverarbeitung
  11. entwickelt und dann diesen Spellchecker in abgewandelter Form dort
  12. einbaut.
  13.  
  14. Das Modul Lexi.def enthält folgende Konstanten:
  15.  
  16. MinWordLength=2
  17. MaxWordLength=14
  18. MinFracSizeS=4
  19. MinFracSizeI=6
  20. MinLexSize=10000
  21. MoreWords= 1000
  22.  
  23. MinLexSize gibt die Standardgröße des Lexikons an. Beim Starten des
  24. Programmes wird also für 10000 Worte Speicherplatz alloziert. Ist
  25. dieser Platz voll, wird das Lexikon auf dem Device T:
  26. zwischengespeichert und es wird ein um MoreWords größerer
  27. Speicherplatz angefordert. Die übrigen Konstanten werden im folgenden
  28. Text erläutert.
  29.  
  30. Datenstrukturen und Zerlegung von Worten
  31. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  32. Das Lexikon wird im Rechner als Array Of Word dargestellt, wobei
  33. Word=Array[0..MaxWordLength] ist. Dieses Array wird bereits beim
  34. Aufbau sortiert, so daß die Worte in ihm durch binäre Suche recht
  35. schnell gefunden werden können. Die Konstante MaxWordLength habe ich
  36. auf 14 gesetzt. Außerdem habe ich eine Konstante MinWordLength=2
  37. eingeführt. Worte mit einer Länge < MinWordLength werden nicht ins
  38. Lexikon aufgenommen. Ins Lexikon können also nur Worte aufgenommen
  39. werden, die nicht länger als 14 Buchstaben sind. Worte, die länger
  40. sind, bestehen in der Regel aus mehreren Komponenten, wie z.B.
  41. ComputerBuchVerlag und können in ihre Komponenten zerlegt werden,
  42. bevor sie ins Lexikon aufgenommen werden. Die Zerlegung geschieht
  43. folgendermaßen: Ich kopiere von einem Wort die linke und die rechte
  44. Seite, wobei diese Seite maximal MaxWordLength und mindestens
  45. MaxFracSizeS Buchstaben haben muß. Dann wird nach der linken und
  46. rechten Seite in Lexikon gesucht. Wird eine Seite gefunden, so wird
  47. diese von dem ursprünglichen Wort abgespalten und mit dem restlichen
  48. Wort in gleicher Weise fortgefahren. Wird auf diese Weise die Länge
  49. des Wortes auf null reduziert, so ist das Wort also vollständig in
  50. Komponenten zerlegt worden. Bleibt aber ein Rest übrig, und ist dieser
  51. Rest größer als MaxFracSizeI so wird der Rest als eigenständiges Wort
  52. angesehen und ins Lexikon übernommen. Beispiel: Die Worte "Computer"
  53. und "Buch" seien im Lexikon schon vorhanden. Soll nun das Wort
  54. Computerbuchverlag untersucht werden, so wird zuerst einmal Computer
  55. abgespalten. Da der erste Buchstabe von "Computerbuchverlag" groß war,
  56. muß der Rest, also buchverlag in Buchverlag umgewandelt werden. Dann
  57. wird Buch abgespalten und es bleibt Verlag übrig. Das Wort ist im
  58. Lexikon nicht vorhanden und wird einsortiert. Probleme könnte es
  59. geben, wenn z.B. das Wort "alten" schon in Lexikon vorhanden ist und
  60. nun "enthalten" untersucht werden soll. Würde man "alten" abspalten,
  61. so bliebe enth übrig und würde als gültiges Wort ins Lexikon
  62. übernommen. Um solchen Unsinn weitgehend zu vermeiden, habe ich die
  63. Konstanten MinFracSizeS und MinFracSizeI eingeführt. Es werden nur
  64. Komponenten abgespalten, die mindestens MinFracSizeS lang sind, und
  65. außerdem muß der verbleibende Rest mindestens noch MinFracSizeI
  66. Buchstaben enthalten, um ins Lexikon eingefügt zu werden. Umso größer
  67. man diese beiden Konstanten macht, umso weniger Müll wird ins Lexikon
  68. aufgenommen. Macht man sie aber zu groß, so werden viele Worte
  69. überhaupt nicht mehr getrennt. Sinnvoll erscheint mir (für deutsche
  70. Texte) MinFracSizeS=4 und MinFracSizeI=6. Eventuell kann man diese
  71. Konstanten für andere Sprachen etwas ändern.
  72.  
  73. Generierung des Lexikons:
  74. ~~~~~~~~~~~~~~~~~~~~~~~~~
  75. Die Generierung ist im Prinzip sehr einfach: Aus dem Quelltext wird
  76. Wort für Wort von der Prozedur ReadWord gelesen, dann eventuell in
  77. Komponenten zerlegt und ins Lexikon einsortiert. Dabei werden Worte,
  78. die einen Punkt oder einen anderen Zeichen, das nachfolgende
  79. Großschreibung erzwingt, ignoriert, da die Worte in ihrer natürlichen
  80. Schreibweise ins Lexikon übernommen werden sollen.
  81.  
  82. Überprüfung von Texten
  83. ~~~~~~~~~~~~~~~~~~~~~~
  84. Hierbei wird ebenfalls der Text wortweise gelesen, alles was kein Wort
  85. darstellt wird ignoriert. Wird ein gelesenes Wort nicht im Lexikon
  86. gefunden, so muß der Mensch entscheiden, ob es richtig geschrieben
  87. ist. (Ein Wort besteht aus Buchstaben. Was ein Buchstabe ist,
  88. entscheidet die Prozedur Letter(). Dabei werden auch sämtliche Umlaute
  89. als Buchstaben anerkannt, und auch das Hochkomma in Worten wie "can't"
  90. oder "I'm" wird als Buchstabe betrachtet!)
  91.  
  92. Steuerzeichen
  93. ~~~~~~~~~~~~~
  94. Probleme kann es geben, wenn Steuerzeichen mit Worten verwechselt
  95. werden können. Benutzt beispielsweise eine Textverarbeitung die Sequenz
  96. "#FETT#" um im Text auf Fettschrift umzuschalten, so würde die
  97. derzeitige Version der Prozedur ReadWord das Steuerzeichen nicht
  98. erkennen und das Wort FETT als normales Wort zurückgeben. Für so eine
  99. Textverarbeitung müßte man die Prozedur ReadWord also entsprechend
  100. anpassen. Vermutlich werden aber die meisten
  101. Textverarbeitungsprogramme Steuerzeichen durch undruckbare Zeichen
  102. darstellen, so daß sich keine Probleme ergeben sollten. (Die
  103. Amiga-spezifischen Steuersequenzen in ASCII-Texten, welche z.B. die
  104. Zeichenfarbe umschalten, werden von der Prozedur ReadWord erkannt und
  105. überlesen).
  106.  
  107.  
  108. Stefan Salewski, 4.3.90
  109.  
  110.  
  111. Noch etwas zu der Bearbeitung von Files von Textverarbeitungsprogrammen
  112. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  113. Textverarbeitungen speichern ihre Texte in der Regel nicht als
  114. ASCII-Text ab, sondern fügen einige Steuerzeichen ein. Dabei kann es
  115. zu Problemen kommen, wenn Steuerzeichen mitten in einem Wort stehen.
  116. Das ist z.B. der Fall, wenn die Textverarbeitung Worte automatisch
  117. trennt. Die Trennung besteht dann oft nicht einfach aus einem '-' und
  118. einen EOL, wie in ASCII-Texten, sondern aus mehreren anderen Zeichen.
  119. Wenn man nun solche Texte zur Generierung eines Lexikons benutzt, kann
  120. es sein, daß die beiden Hälften eines getrennten Wortes als einzelne
  121. Worte ins Lexikon aufgenommen werden! Die normale Trennung, die aus
  122. einem '-' und einem EOL besteht, wird von der Prozedur ReadWord
  123. erkannt und das getrennte Wort wird dann ignoriert. Das gleiche gilt
  124. auch für Trennungen, die mit CHAR(4) beginnen. ( Ich glaube, damit
  125. trennt BeckerText Worte)
  126.  
  127. Weitere Probleme kann es geben, wenn Sie die Zeilenlänge eines Textes
  128. verändern. Einige Textverarbeitungen speichern ihre Texte mit
  129. irgendwelchen Füllzeichen ab, so daß alle Zeilen gleich lang sind.
  130. Wird die Zeilenlänge nun verändert, so wird die Textverarbeitung den
  131. Text nicht mehr richtig einlesen. Abhilfe: Entweder speichern Sie den
  132. Text als Ascii-File ab, bearbeiten es dann mit dem SpellChecker und
  133. lesen es dann wieder in die Textverarbeitung ein, oder sie speichern
  134. es irgendwo (RAM: ) in beliebiger Form zwischen, lassen es dann vom
  135. SpellChecker durchsehen und notieren sich alle gefundenen Fehler. Dann
  136. löschen sie diesen zwischengespeicherten Text und korrigieren die
  137. Fehler in ihrer Textverarbeitung.
  138.  
  139. Stefan Salewski, 12.3.90
  140.  
  141.  
  142.